package agentspeakeditor.editors.common.checker;

import agentspeakeditor.editors.common.AST.Program;
import agentspeakeditor.editors.common.AST.Expression.ExprBaseId;
import agentspeakeditor.editors.common.AST.Expression.ExprBaseNot;
import agentspeakeditor.editors.common.AST.Expression.ExprBasePar;
import agentspeakeditor.editors.common.AST.Expression.ExprBaseRelation;
import agentspeakeditor.editors.common.AST.Expression.LogicExpr;
import agentspeakeditor.editors.common.AST.Line.Belief;
import agentspeakeditor.editors.common.AST.Line.Body;
import agentspeakeditor.editors.common.AST.Line.BoolContext;
import agentspeakeditor.editors.common.AST.Line.Command;
import agentspeakeditor.editors.common.AST.Line.Comment;
import agentspeakeditor.editors.common.AST.Line.Context;
import agentspeakeditor.editors.common.AST.Line.Event;
import agentspeakeditor.editors.common.AST.Line.InitialDesire;
import agentspeakeditor.editors.common.AST.Line.LogicContext;
import agentspeakeditor.editors.common.AST.Line.Plan;
import agentspeakeditor.editors.common.AST.Terminal.BoolConstant;
import agentspeakeditor.editors.common.AST.Terminal.ID;
import agentspeakeditor.editors.common.AST.Terminal.LogicOperator;
import agentspeakeditor.editors.common.AST.Terminal.Number;
import agentspeakeditor.editors.common.AST.Terminal.RelationalOperator;

public interface Visitor {
	
	//Program
		public Object visitProgram(Program prog,Object arg) throws SemanticException;
	//Line
		public Object visitPlan(Plan plan,Object arg) throws SemanticException;
		public Object visitInitialDesire(InitialDesire init,Object arg) throws SemanticException;
		public Object visitBelief(Belief belief,Object arg) throws SemanticException;
		public Object visitComment(Comment comment,Object arg) throws SemanticException;
	// Plan
		// Event
		public Object visitEvent(Event event, Object arg) throws SemanticException;
		// Context
		public Object visitBoolContext(BoolContext bool, Object arg) throws SemanticException;		
		public Object visitLogicContext(LogicContext logic, Object arg) throws SemanticException;
		// Body
		public Object visitBody(Body body, Object arg) throws SemanticException;
		public Object visitCommand(Command command, Object arg) throws SemanticException;
	// Expression
		public Object visitExprBaseId(ExprBaseId ebId, Object arg) throws SemanticException;
		public Object visitExprBaseNot(ExprBaseNot ebNot, Object arg) throws SemanticException;
		public Object visitExprBasePar(ExprBasePar ebPar, Object arg) throws SemanticException;
		public Object visitExprBaseRelation(ExprBaseRelation ebRel, Object arg) throws SemanticException;
		public Object visitLogicExpr(LogicExpr logExpr, Object arg) throws SemanticException;
	// Terminal
		public Object visitBoolConstant(BoolConstant boolCons, Object arg) throws SemanticException;
		public Object visitID(ID id, Object arg) throws SemanticException;
		public Object visitNumber(Number number, Object arg) throws SemanticException;
		public Object visitLogicOperator(LogicOperator logOp, Object arg) throws SemanticException;
		public Object visitRelationalOperator(RelationalOperator relOp, Object arg) throws SemanticException;
		
}
